// class container{
//     constructor(value){
//         this._value = value
//     }
//     map(fn){
//         return new container(fn(this._value))
//     }
// }
// let a = new container(5)
//     .map(x=>x+5)
//     .map(x=>x*x)
//     console.log(a)

class container{
    static of(value){
        return new container(value)
    }
    constructor(value){
        this._value = value
    }
    map(fn){
        return container.of(fn(this._value))
    }
}
// let r = container.of(5)
//     .map(x=>x+2)
//     .map(x=>x*x)
//     console.log(r)
//演示 null undefined 的问题，副作用
let i = container.of(null)
    .map(x=>x.toUpperCase())
    console.log(i)